package com.scau402.system1.domain.dto;

import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;

import javax.validation.constraints.Min;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;

/**
 * 商品入库单对象 wms_inbound_order
 *
 * @author ruoyi
 * @date 2023-06-26
 */
@Data
public class InboundDTO {
    private static final long serialVersionUID = 1L;

    // 采购方式——0:采购、1:借货、2:还货
    private String orderType;

    // 入库单号
    @NotBlank(message = "入库单号不能为空")
    private String orderCode;

    // 供应商id
//    @NotNull(message = "供应商id不能为空")
    private Long supplierId;

    // 仓库id
    @NotNull(message = "仓库id不能为空")
    private Long desWarehouseId;

    // 仓位id
    @NotNull(message = "仓位id不能为空")
    private Long desStorageId;

    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
    // 有效期
    private LocalDateTime validDate;

    // 客户id
    private Long clientId;

    // 出库单号，还货入库的时候上送
    private String outboundOrderCode;

    // 加工厂id
    private Long processorId;

    // 入库明细
    private List<InboundDetailDTO> inboundDetailDTOList;

    @Data
    public static class InboundDetailDTO {
        // 如果为还货、退货入库，jade表中数据已存在，可以获取到jadeId
        private Long jadeId;

        // 图片id
        private Long imageId;

        // 货品条码
        @NotBlank(message = "货品条码不能为空")
        private String jadeBarcode;

        // 货品品类，材质类型，如果多级，那就用-连接，比如和田玉是1，手镯是2，那jadeTypeId=“1-2”
        private String jadeTypeId;

        // 数量
        @NotNull(message = "数量不能为空")
        @Min(value = 1, message = "数量不能小于1")
        private Long jadeQuantity;

        // 单位
        private String unit;

        // 成本价
        @NotNull(message = "成本价不能为空")
        private BigDecimal jadeCost;

        // 成本价暗码
        private String jadeCostCipher;

        // 标签价
        @NotNull(message = "标签价不能为空")
        private BigDecimal jadeTagPrice;

        // 标签价暗码
        private String jadeTagPriceCipher;

        // 市场价
        private BigDecimal jadeMarketPrice;

        // 备注
        private String remark;

        // 出库单编码（还货时记录)
        private String outboundOrderDetailCode;

    }

}

